unit NotaFiscalImpressaDAO;

interface

uses ImpressaoNotaFiscal, DB, Contnrs;

type
  INotaFiscalImpressaoDAO = interface
  ['{436F5ACC-EEFC-497A-946F-9C4F116EEC7D}']
    function InserirNotaFiscal(Nota : TImpressaoNotaFiscal) :integer;
    function AlterarNotaFiscal(Nota : TImpressaoNotaFiscal) : boolean;
    function ExcluirNotaFiscal(Numero: String ): Boolean;
    function SelecionarNotas(criteria : string) : TDataSet;
    function SelecionarNotaPorID(id : integer) : TImpressaoNotaFiscal;
    function DataSetToNotaFiscal (DataSet : TDataSet) : TObjectList;
    function SelecionarNotaPorNumero(Numero : string;
      Ano : integer) : TImpressaoNotaFiscal;
    function ExisteNota(Numero : string; Ano : integer):boolean;
    function SelecionarIdNota(Numero : string; Ano : integer) : integer;
  end;

  INotaProdutoDAO = interface
  ['{99118C70-A5C6-4137-B796-B9C11C77B692}']
    function InserirProduto(Item : TItemNotaFiscal) : boolean;
    function AlterarProduto(Item : TItemNotaFiscal) : boolean;
    function ExcluirProduto(Item : TItemNotaFiscal) : boolean;
    function SelecionarProdutos(criteria : string) : TDataSet;
    function SelecionarProdutosPorNota(id : integer) : TDataSet;
    function DataSetParaProdutos(DataSet:TDataSet) : TObjectList;
    procedure InserirProdutosNota(Itens : TObjectList; Notaidf : integer);
  end;
  INotaServicoDAO = interface
  ['{17CA971A-D1E3-4955-89AE-7E8ECD0C22EF}']
    function InserirServico(Item : TItemNotaFiscal) : boolean;
    function AlterarServico(Item : TItemNotaFiscal) : boolean;
    function ExcluirServico(Item : TItemNotaFiscal) : boolean;
    function SelecionarServico(criteria : string) : TDataSet;
    function SelecionarServicoPorNota(id : integer) : TDataSet;
    procedure InserirServicosNota(Itens : TObjectList; Notaidf : integer);
    function DataSetParaServico(DataSet:TDataSet) : TObjectList;
  end;
  INotaTransporteDAO = interface
  ['{CC8E4FAE-0AA5-40EB-A4BE-D02776EB7709}']
    function InserirTransporte(nota : TTransporteNota) : boolean;
    function AlterarTransporte(Nota : TTransporteNota) : boolean;
    function ExcluirTransporte(Nota : TTransporteNota) : boolean;
    function SelecionarTransporte(criteria : string) : TDataSet;
    function SelecionarPorNota(id : integer) : TTransporteNota;
    function DataSetToTransporte(DataSet : TDataSet) : TObjectList;
  end;

  function CriarNotaFiscalImpressaoDAO : INotaFiscalImpressaoDAO;
  function CriarNotaProdutoDAO : INotaProdutoDAO;
  function CriarNotaServicoDAO : INotaServicoDAO;
  function CriarNotaTransporteDAO : INotaTransporteDAO;
implementation

uses FireBirdNotaFiscalImpressaDAO;

function CriarNotaFiscalImpressaoDAO : INotaFiscalImpressaoDAO;
begin
  Result := INotaFiscalImpressaoDAO(TFBNotaFiscalImpressaDAO.Create);
end;

function CriarNotaProdutoDAO : INotaProdutoDAO;
begin
  Result := INotaProdutoDAO(TFBNotaProdutoDAO.Create);
end;

function CriarNotaServicoDAO : INotaServicoDAO;
begin
  Result := INotaServicoDAO(TFBNotaServicoDAO.Create);
end;

function CriarNotaTransporteDAO : INotaTransporteDAO;
begin
  Result := INotaTransporteDAO(TFBNotaTransporte.Create);
end;

end.
